package com.scau.RBAC.dao;

import java.util.List;
import java.util.Map;

/**
 * 基础DAO接口，定义了所有实体类的通用CRUD操作
 * 使用泛型T表示实体类型，ID表示主键类型
 */
public interface BaseDao<T, ID> {

    /**
     * 插入一条记录
     * @param entity 实体对象
     * @return 插入的记录数
     */
    int insert(T entity);

    /**
     * 批量插入记录
     * @param entities 实体对象列表
     * @return 插入的记录数
     */
    int batchInsert(List<T> entities);

    /**
     * 根据ID删除记录
     * @param id 主键ID
     * @return 删除的记录数
     */
    int deleteById(ID id);

    /**
     * 批量删除记录
     * @param ids 主键ID列表
     * @return 删除的记录数
     */
    int batchDelete(List<ID> ids);

    /**
     * 更新记录
     * @param entity 实体对象
     * @return 更新的记录数
     */
    int update(T entity);

    /**
     * 根据ID查询记录
     * @param id 主键ID
     * @return 实体对象
     */
    T findById(ID id);

    /**
     * 查询所有记录
     * @return 实体对象列表
     */
    List<T> findAll();

    /**
     * 分页查询
     * @param params 查询条件参数
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 实体对象列表
     */
    List<T> findByPage(Map<String, Object> params, int pageNum, int pageSize);

    /**
     * 根据条件查询记录数
     * @param params 查询条件参数
     * @return 记录总数
     */
    long count(Map<String, Object> params);
}